package ma.xin.shi.arxml.comm;

import org.w3c.dom.Element;

/**********************
 * 命名空间处理专用类
 * 封装XML标准命名空间相关的解析逻辑
 
    调用方式：
     // 假设已获取到目标元素（如NETWORK-MASK）
    Element networkMaskElement = ...; 

    // 调用命名空间工具类的方法，直接获取是否为true
    boolean isXsiNilTrue = NamespaceHandler.getXsiNilTrue(networkMaskElement);

    // 后续业务逻辑（示例）
    if (isXsiNilTrue) {
        XmlParseComm.logEx("该元素配置了xsi:nil=\"true\"，按空值处理");
        // 空值业务逻辑...
    } else {
        XmlParseComm.logEx("该元素未配置xsi:nil=\"true\"，按正常值处理");
        // 正常业务逻辑...
    }
 **********************/
public class NamespaceHandler {
    // 1. 定义xsi（XMLSchema-instance）标准命名空间URI（固定值，不可修改）
    public static final String XSI_NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema-instance";
    // 2. 定义xsi:nil属性的本地名（固定为"nil"）
    private static final String XSI_NIL_ATTRIBUTE_NAME = "nil";
    // 3. 目标属性值（需匹配的xsi:nil值）
    private static final String TARGET_NIL_VALUE = "true";

    /**
     * 判断指定XML元素是否存在 xsi:nil="true" 属性
     * @param targetElement 待解析的XML元素（如NETWORK-MASK）
     * @return true：元素存在xsi:nil="true"；false：不存在/值不匹配/元素为null
     */
    public static boolean getXsiNilTrue(Element targetElement) {
        // 防御性判断：避免传入null导致空指针异常
        if (targetElement == null) {
            XmlParseComm.logEx("NamespaceHandler.getXsiNilTrue：传入的XML元素为null，返回false");
            return false;
        }

        // 核心：通过命名空间URI + 属性本地名，获取xsi:nil属性值（兼容前缀变化）
        String actualNilValue = targetElement.getAttributeNS(XSI_NAMESPACE_URI, XSI_NIL_ATTRIBUTE_NAME);

        // 打印调试日志：展示实际获取到的属性值
        XmlParseComm.logEx("NamespaceHandler.getXsiNilTrue：当前元素的xsi:nil属性值 = " + actualNilValue);

        // 匹配判断：忽略大小写（兼容XML中True/TRUE等写法），仅返回是否等于"true"
        boolean isNilTrue = TARGET_NIL_VALUE.equalsIgnoreCase(actualNilValue);

        // 打印结果日志
        XmlParseComm.logEx("NamespaceHandler.getXsiNilTrue：是否匹配xsi:nil=\"true\" = " + isNilTrue);
        return isNilTrue;
    }
}